package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.boot.configurationprocessor.json.JSONObject;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface levelService {


    //一级查询
    List<BaseCategory1> getCategory1();

    //二级查询
    List<BaseCategory2> getCategory2(Long category1id);

    //三级查询
    List<BaseCategory3> getCategory3(Long category2Id);

    //根据分类id获取平台属性
    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);

    //添加平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    //根据平台属性ID获取平台属性
    BaseAttrInfo getAttrInfo(Long attrId);

    //获取品牌分页列表
    IPage baseTrademark(Integer page, Integer limit);

    //品牌添加
    void baseTrademarksave(BaseTrademark baseTrademark);

    //查询SPU的分页结果集
    IPage spuPage(Integer page, Integer limit, Long category3Id);

    //添加spu 品牌下拉框
    List<BaseTrademark> getTrademarkList();

    //添加SPU 之 销售属性下拉框
    List<BaseSaleAttr> baseSaleAttrList();

    //SPU添加
    void saveSpuInfo(SpuInfo spuInfo);

    //根据SpuID查询所有此商品的图片  bigint
    List<SpuImage> spuImageList(Long spuId);

    //根据spuId获取销售属性
    List<SpuSaleAttr> spuSaleAttrList(Long spuId);

    //保存SKU
    void saveSkuInfo(SkuInfo skuInfo);

    //获取sku分页列表
    IPage skuPage(Integer page, Integer limit);

    //上架
    void onSale(Long skuId);

    //下架
    void cancelSale(Long skuId);

    //1、根据skuId查询sku_info  根据skuId查询sku_image  /inner：内部资源
    SkuInfo getSkuInfo(Long skuId);

    //2:查询实时价格   优化的时候 不要放进缓存中
    BigDecimal getPrice(Long skuId);

    //3、根据category3Id查询一二三级分类
    BaseCategoryView getCategoryView(Long category3Id);

    //4、根据spuId查询spu_sale_attr_value(被选中项）  商品ID spu  库存ID
    List<SpuSaleAttr> getSpuSaleAttrValue(Long skuId, Long spuId);

    //5、skuId与销售属性组合
    Map spuValueIdsMap(Long spuId);

    //首页商品分类实现
    List<BaseCategoryView> getBaseCategoryList();

    //查询品牌
    BaseTrademark getBaseTrademarkById(Long tmId);

    //根据skuId 查询平台属性及属性值
    List<SkuAttrValue> getSkuAttrValueList(Long skuId);

}
